﻿
using 依赖倒置原则._1;
using 依赖倒置原则._2;
using 依赖倒置原则._3;

Console.WriteLine("依赖倒置原则!");
/*
 开放封闭原则是面向对象的设计的中级目标，而依赖倒置原则是实现开放封闭原则的基础。
如果开放封闭原则是设计大楼的蓝田，那么依赖倒置原则就是大楼的钢铁架构。

依赖倒置原则：
高层模块（调用者）不应该依赖于低层模块（被调用者），两个都应该依赖于抽象

依赖倒置原则的本质是通过接口或抽象使各个模块的实现独立，彼此互补影响，从而实现模块间的松耦合。
 */
//1
Singer singer = new Singer();
singer.SingSong(new ChineseSong());
singer.SingSongEnglish(new EnglishSong());

//2 面向接口编程
Singer2 singer2 = new Singer2();
ISongWords songWords = new ChineseSong2();
singer2.SingSong(songWords);

//3  抽象不应该细节  细节应该依赖抽象

IDriver driver = new Student();
ICar car = new Benz();
driver.Drive(car);

driver.SetCar(car);
driver.Drive();

IDriver driver1 = new Teacher(car);
driver1.Drive(car); 